package com.zjl.学习.第02章_作业对象Job;

/**
 * Job作业可以简单理解为一段业务流程的实现，可以根据业务逻辑拆分一个或者多个逻辑块(step)，然后业务逻辑顺序，逐一执行。
 * 所以作业可以定义为：能从头到尾独立执行的有序的步骤(Step)列表。
 *
 * ●有序的步骤列表
 * 一次作业由不同的步骤组成，这些步骤顺序是有意义的，如果不按照顺序执行，会引起逻辑混乱，
 *      比如购物结算，先点结算，再支付，最后物流，如果反过来那就乱套了，作业也是这么一回事。
 * ●从头到尾
 * 一次作业步骤固定了，在没有外部交互情况下，会从头到尾执行，前一个步骤做完才会到后一个步骤执行，不允许随意跳转，但是可以按照一定逻辑跳转。
 * ●独立
 * 每一个批处理作业都应该不受外部依赖影响情况下执行。
 *
 * 作业代码设计
 * 前面定义讲了作业执行是相互独立的，代码该怎么设计才能保证每次作业独立的性呢？
 * 答案是：Job instance(作业实例) 与 Job Execution(作业执行对象)
 * ●Job instance(作业实例)
 * 当作业运行时，会创建一个Job Instance(作业实例)，它代表作业的一次逻辑运行，可通过作业名称与作业标识参数进行区分。
 * 比如一个业务需求： 每天定期数据同步，作业名称-daily-sync-job 作业标记参数-当天时间
 * ●Job Execution(作业执行对象)
 * 当作业运行时，也会创建一个Job Execution(作业执行器)，负责记录Job执行情况(比如：开始执行时间，结束时间，处理状态等)。
 *
 *
 * 那为啥会出现上面架构设计呢？原因：批处理执行过程中可能出现两种情况：
 * ●一种是一次成功
 * 仅一次就成从头到尾正常执行完毕，在数据库中会记录一条Job Instance 信息， 跟一条 Job Execution 信息
 * ●另外一种异常执行
 * 在执行过程因异常导致作业结束，在数据库中会记录一条Job Instance 信息， 跟一条Job Execution 信息。
 * 如果此时使用相同识别参数再次启动作业，那么数据库中不会多一条Job Instance 信息， 但是会多了一条Job Execution 信息，这就意味中任务重复执行了。
 * 刚刚说每天批处理任务案例，如果当天执行出异常，那么人工干预修复之后，可以再次执行。
 *
 * 最后来个总结：
 *      Job Instance = Job名称 + 识别参数
 *      Job Instance 一次执行创建一个 Job Execution对象
 *      完整的一次Job Instance 执行可能创建一个Job Execution对象，也可能创建多个Job Execution对象
 */
public class A_Job的定义 {
}
